﻿//Copyright 2011 - Jonathan Allen

using System;
using System.Collections.Generic;
using System.Linq;

namespace Granite.ComponentModel
{
	/// <summary>
	/// Used to notify when the dictionary changes
	/// </summary>
	public interface INotifyDictionaryChanged<TKey, TValue> : INotifyDictionaryChanged
	{
		/// <summary>
		/// This type safe event fires after a value is added to the dictionary no matter how it is added.
		/// </summary>
		/// <remarks>Triggered by ???</remarks>
		event EventHandler<ItemEventArgs<TValue>> ValueAdded;

		/// <summary>
		/// This type safe event fires after a value is removed from the dictionary no matter how it is removed.
		/// </summary>
		/// <remarks>Triggered by ???</remarks>
		event EventHandler<ItemEventArgs<TValue>> ValueRemoved;

		/// <summary>
		/// This type safe event fires after a key is added to the dictionary no matter how it is added.
		/// </summary>
		/// <remarks>Triggered by ???</remarks>
		event EventHandler<ItemEventArgs<TKey>> KeyAdded;

		/// <summary>
		/// This type safe event fires after a key is removed from the dictionary no matter how it is removed.
		/// </summary>
		/// <remarks>Triggered by ???</remarks>
		event EventHandler<ItemEventArgs<TKey>> KeyRemoved;
	}

}
